/*
 * InterpreteComandosServer.cpp
 *
 *  Created on: 24/06/2014
 *      Author: Abraham Alan Panuccio
 */

#include "InterpreteComandosServer.h"

InterpreteComandosServer *InterpreteComandosServer::instance = NULL;

InterpreteComandosServer::InterpreteComandosServer(){
	instance->mapaComandos[ACC_MOVER] 	   			= (ComandoServidor *) new ComandoMover();
	instance->mapaComandos[ACC_CREAR_AVE]  			= (ComandoServidor *) new ComandoCrearAve();
	instance->mapaComandos[ACC_CREAR_LADRILLO]		= (ComandoServidor *) new ComandoCrearLadrillo();
	instance->mapaComandos[ACC_CREAR_TORTA]			= (ComandoServidor *) new ComandoCrearTorta();
	instance->mapaComandos[ACC_REPARAR] 	   		= (ComandoServidor *) new ComandoReparar();
	instance->mapaComandos[ACC_DELETE_AVE] 			= (ComandoServidor *) new ComandoDeleteAve();
	instance->mapaComandos[ACC_DELETE_LADRILLO] 	= (ComandoServidor *) new ComandoDeleteLadrillo();
	instance->mapaComandos[ACC_DELETE_TORTA]		= (ComandoServidor *) new ComandoDeleteTorta();
	instance->mapaComandos[ACC_LANZAR_LADRILLO]		= (ComandoServidor *) new ComandoLanzarLadrillo();
	instance->mapaComandos[ACC_FIN_TRAMO]			= (ComandoServidor *) new ComandoFinTramo();
	instance->mapaComandos[ACC_FIN_NIVEL]			= (ComandoServidor *) new ComandoFinNivel();
	instance->mapaComandos[ACC_FIN_PARTIDA]			= (ComandoServidor *) new ComandoFinPartida();
	instance->mapaComandos[ACC_INIT_PARTIDA]		= (ComandoServidor *) new ComandoInitPartida();
	instance->mapaComandos[ACC_INIT_NIVEL]			= (ComandoServidor *) new ComandoInitNivel();
	instance->mapaComandos[ACC_INIT_TRAMO]			= (ComandoServidor *) new ComandoInitTramo();
	instance->mapaComandos[ACC_ACT_RANK]			= (ComandoServidor *) new ComandoActRanking();
	instance->mapaComandos[ACC_COMENZAR]			= (ComandoServidor *) new ComandoComenzar();
}

/*Retorna la instancia si existe, sino la crea y la retorna.*/
InterpreteComandosServer * InterpreteComandosServer::getInstance(){
	if(!instance)
		instance = new InterpreteComandosServer();

	return instance;
}

/*Devuelve el comando que atiende la accion solicitada en la estructura t_action*/
ComandoServidor * InterpreteComandosServer::getComando(t_accion *action){
	return instance->mapaComandos[action->id_accion];
}

